home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 05.zip
/
BS1 part 5
/
ANC_UTULITYS_16.adf
/
Check.arc
/
Checkers
(
.txt
)
next >
Wrap
AmigaBASIC Source Code
|
1988-09-21
|
8KB
|
253 lines
SAY TRANSLATE$("")
SCREEN 2,640,200,3,2
WINDOW 2,"",,0,2
GOSUB MakeScreen
Start:g=-1:R(0)=-99:NP=12
DATA 1,0,1,0,0,0,-1,0,0,1,0,0,0,-1,0,-1,15
FOR x=7 TO 0 STEP -1:FOR y=0 TO 7:READ J:IF J=15 THEN 10
s(x,y)=J:GOTO 20
10 RESTORE:READ s(x,y)
20 NEXT y,x
30 FOR x=7 TO 0 STEP -1:FOR y=0 TO 7:IF s(x,y)>-1 THEN 40
IF s(x,y)=-1 THEN
FOR a=-1 TO 1 STEP 2
b=g:GOSUB 50
NEXT a
END IF
IF s(x,y)=-2 THEN
FOR a=-1 TO 1 STEP 2
FOR b=-1 TO 1 STEP 2
GOSUB 50
NEXT b,a
END IF
40 NEXT y,x:GOTO 90
50 u=x+a:v=y+b:IF u<0 OR u>7 OR v<0 OR v>7 THEN 60
IF s(u,v)=0 THEN GOSUB 70:GOTO 60
IF s(u,v)<0 THEN 60
u=u+a:v=v+b:IF u<0 OR v<0 OR u>7 OR v>7 THEN 60
IF s(u,v)=0 THEN GOSUB 70
60 RETURN
70 IF v=0 AND s(x,y)=-1 THEN q=q+2
IF ABS(y-v)=2 THEN q=q+5
IF y=7 THEN q=q-2
IF y=0 OR u=7 THEN q=q+1
FOR c=-1 TO 1 STEP 2:IF u+c<0 OR u+c>7 OR v+g<0 THEN 80
IF s(u+c,v+g)<0 THEN q=q+1:GOTO 80
IF u-c<0 OR u-c>7 OR v-g>7 THEN 80
IF s(u+c,v+g)>0 AND (s(u-c,v-g)=0 OR (u-c=x AND v-g=y)) THEN q=q-2
80 NEXT c:IF q>R(0) THEN R(0)=q:R(1)=x:R(2)=y:R(3)=u:R(4)=v
q=0:RETURN
90 IF R(0)=-99 THEN 260 'You Win
R(0)=-99
100 IF R(4)=0 THEN s(R(3),R(4))=-2:GOTO 110 'King Computers Piece
Count=Count+1:IF Count=1 THEN GOSUB PlaceCheckers
IF s(R(1),R(2))=-1 AND R(2)<R(4) THEN 150 'stops illegal double jump
s(R(3),R(4))=s(R(1),R(2))
110 s(R(1),R(2))=0 'clears where computer just moved from
e=R(1):h=R(2):a=R(3):b=R(4)
IF ABS(R(1)-R(3))<>2 THEN cc=-1:rr=-1:GOSUB move:GOTO 150
cc=(R(1)+R(3))/2:rr=(R(2)+R(4))/2
s(cc,rr)=0:GOSUB move 'clears spot jumped
x=R(3):y=R(4):IF s(x,y)=-1 THEN b=-2:FOR a=-2 TO 2 STEP 4:GOSUB 130
IF s(x,y)=-2 THEN 120
NEXT a:IF R(0)<>-99 THEN R(0)=-99:GOTO 100
120 FOR a=-2 TO 2 STEP 4:FOR b=-2 TO 2 STEP 4:GOSUB 130:NEXT b
NEXT a:IF R(0)<>-99 THEN R(0)=-99:GOTO 100
GOTO 150
130 u=x+a:v=y+b:IF u<0 OR u>7 OR v<0 OR v>7 THEN 140
IF s(u,v)=0 AND s(x+a/2,y+b/2)>0 THEN GOSUB 70
140 RETURN
150 LOCATE 1,1:PRINT SPACE$(80):LOCATE 1,1:PRINT "From ";
160 IF MOUSE(0)<>0 THEN 160
170 q$=INKEY$:IF q$=CHR$(139) THEN Help
IF MOUSE(0)=0 THEN 170
col=MOUSE(1):row=MOUSE(2):GOSUB Calc
IF col<0 OR col>7 OR row<0 OR row>7 THEN 150
PRINT col;" ";row:e=col:h=row
IF e<0 OR h<0 THEN BEEP:GOTO 150
x=e:y=h:IF s(x,y)<=0 THEN BEEP:GOTO 150
180 LOCATE 1,30:PRINT SPACE$(15):LOCATE 1,30:PRINT "To ";
IF MOUSE(0)=-1 THEN
185 IF MOUSE(0)=0 THEN 205 :ELSE 185
END IF
190 IF MOUSE(0)<>0 THEN 190
200 q$=INKEY$:IF q$=CHR$(139) THEN Help
IF MOUSE(0)=0 THEN 200
205 col=MOUSE(1):row=MOUSE(2):GOSUB Calc
IF col<0 OR col>7 OR row<0 OR row>7 THEN BEEP:GOTO 150
IF s(x,y)=1 AND row<h THEN
BEEP:FOR i=1 TO 100:NEXT i
SAY TRANSLATE$("cheater cheater cheater.")
GOTO 180
END IF
PRINT col;" ";row
a=col:b=row:x=a:y=b
IF s(x,y)=0 AND ABS(a-e)<=2 AND ABS(a-e)=ABS(b-h) THEN 210
GOTO 180
210 olds=s(a,b):s(a,b)=s(e,h):s(e,h)=0 'clears where person was
IF ABS(e-a)<>2 THEN cc=-1:rr=-1:GOSUB move:GOTO 250
cc=(e+a)/2:rr=(h+b)/2
IF s(cc,rr)=1 OR s(cc,rr)=2 THEN
SAY TRANSLATE$("You cannot jump over yourself.")
s(e,h)=s(a,b):s(a,b)=olds:GOTO 150
END IF
s(cc,rr)=0:GOSUB move 'clears spot jumped by person
220 LOCATE 1,1:PRINT SPACE$(80):LOCATE 1,1
PRINT "Click again in the same place to end your move."
LOCATE 1,60:PRINT "+To";:SAY TRANSLATE$("and")
230 IF MOUSE(0)<>0 THEN 230
240 q$=INKEY$:IF q$=CHR$(139) THEN Help
IF MOUSE(0)=0 THEN 240
col=MOUSE(1):row=MOUSE(2):GOSUB Calc
IF s(x,y)=1 AND row<b AND POINT(col,row)<>0 THEN BEEP:SAY TRANSLATE$("cheater cheater cheater."):GOTO 220
PRINT col;" ";row:a1=col:b1=row
IF (a1=a AND b1=b) OR col<0 OR col>7 OR row<0 OR row>7 THEN 250
IF s(a1,b1)<>0 OR ABS(a1-a)<>2 OR ABS(b1-b)<>2 THEN 220
e=a:h=b:a=a1:b=b1
GOTO 210
250 IF b=7 THEN s(a,b)=2
GOTO 30
260 PRINT "You Win!":SAY TRANSLATE$("You Win!")
GOTO PlayAgain
ComputerWins:GOSUB move
PRINT "I Win this Game!":SAY TRANSLATE$("I win this game!")
PlayAgain:
SAY TRANSLATE$("How about another?")
PRINT:PRINT "(Y/N)"
270 a$=UCASE$(INKEY$):IF a$="" OR (a$<>"Y" AND a$<>"N") THEN 270
IF a$="Y" THEN GOSUB Draw:Count=0:GOTO Start :ELSE SAY TRANSLATE$("by by."):SYSTEM
move:
ee=e*50+160
hh=(-h+7)*20+31
aa=a*50+160
bb=(-b+7)*20+31
LINE(ee-24,hh-9)-(ee+24,hh+9),5,bf
IF s(a,b)=1 THEN PUT(aa-12,bb-5),yellow,PSET
IF s(a,b)=2 OR b=7 THEN PUT(aa-12,bb-5),yking,PSET
IF s(a,b)=-1 THEN
PUT(aa-12,bb-5),red,PSET
IF cc>-1 AND rr>-1 THEN NP=NP-1:IF NP=0 THEN ComputerWins
END IF
SOUND 10000,0.05
IF s(a,b)=-2 THEN
PUT(aa-12,bb-5),rking,PSET
IF cc>-1 AND rr>-1 THEN NP=NP-1:IF NP=0 THEN ComputerWins
END IF
IF cc>-1 AND rr>-1 THEN
ccc=cc*50+160
rrr=(-rr+7)*20+31
LINE(ccc-24,rrr-9)-(ccc+24,rrr+9),5,bf
END IF
RETURN
PlaceCheckers:
FOR z=0 TO 7
FOR x=0 TO 7
y=-z+7
xx=x*50+160
yy=y*20+31
IF s(x,-y+7)=1 THEN PUT(xx-12,yy-5),yellow,PSET
IF s(x,-y+7)=-1 THEN PUT(xx-12,yy-5),red,PSET
NEXT x,z
RETURN
Help:
SAY TRANSLATE$("if you are really stuck - press Y.")
280 a$=UCASE$(INKEY$):IF a$="" THEN 280
IF a$="Y" THEN PRINT:GOTO ComputerWins
SAY TRANSLATE$("o.k."):GOTO 150
Calc:
IF col>135 AND col<185 THEN col=0
IF col>185 AND col<235 THEN col=1
IF col>235 AND col<285 THEN col=2
IF col>285 AND col<335 THEN col=3
IF col>335 AND col<385 THEN col=4
IF col>385 AND col<435 THEN col=5
IF col>435 AND col<485 THEN col=6
IF col>485 AND col<535 THEN col=7
IF row>21 AND row<41 THEN row=7
IF row>41 AND row<61 THEN row=6
IF row>61 AND row<81 THEN row=5
IF row>81 AND row<101 THEN row=4
IF row>101 AND row<121 THEN row=3
IF row>121 AND row<141 THEN row=2
IF row>141 AND row<161 THEN row=1
IF row>161 AND row<181 THEN row=0
RETURN
MakeScreen:
PALETTE 2,0.8,0,0 'red
LOCATE 2,36:PRINT "Checkers"
PRINT TAB(39);"by"
PRINT TAB(35);"Steve Carr"
LOCATE 7,3:PRINT "TO move - click the piece you want to move and then click on the spot"
PRINT TAB(13);"where you want it"
PRINT TAB(8);"Or - click the piece you want to move, hold the button down,"
PRINT TAB(13);"and let go of it over the spot you want the checker"
LOCATE 15,9:PRINT "If at any time you absolutely can't make a move Press HELP"
LOCATE 17,6:PRINT "TO cancel a move after choosing (from) - click in the brown area"
LOCATE 20,24:PRINT "Do you want to be red or yellow?"
COLOR 2,1:LOCATE 22,34:PRINT " Press R OR Y ";
290 c$=UCASE$(INKEY$):IF c$="" OR (c$<>"R" AND c$<>"Y") THEN 290
DIM yellow(44),red(44),yking(44),rking(44),R(4),s(7,7)
PALETTE 0,0.6,0.33,0 'brown
PALETTE 1,0.6,0.33,0 'brown
PALETTE 3,0.87,0.8,0.4 'yellow
PALETTE 4,1,0.4,0 'orange
PALETTE 5,0.27,0.27,0.27 'dark grey
PALETTE 6,0.8,0.8,0.8 'light grey
PALETTE 7,0,0,0 'black
COLOR 7,5:CLS
CIRCLE(162,32),14,7
PAINT (162,32),7,7
CIRCLE (160,31),14,2
PAINT (160,31),4,2
CIRCLE (160,31),14,7
CIRCLE (160,31),9,7
PAINT (160,31),3,7
GET(146,25)-(176,38),yellow
PAINT(160,31),2,7
GET(146,25)-(176,38),red
COLOR 7,5:CLS
PUT(146,21),red,PSET
COLOR 7,2:LOCATE 4,1
PRINT PTAB(157);"K"
CIRCLE(160,27),9,7
GET(146,21)-(176,34),rking
COLOR 7,5:CLS
PUT(146,21),yellow,PSET
COLOR 7,3: LOCATE 4,1
PRINT PTAB(157);"K"
CIRCLE(160,27),9,7
GET(146,21)-(176,34),yking
Draw:COLOR 1,0:CLS
LINE(136,22)-(534,180),6,bf
FOR i=21 TO 181 STEP 20
LINE(135,i)-(535,i),7
NEXT i
FOR i=135 TO 535 STEP 50
LINE(i,21)-(i,181),7
NEXT i
LINE(134,21)-(134,181),7
LINE(535,21)-(551,26),7
LINE -(551,186),7
LINE -(148,186),7
LINE -(135,181),7
PAINT(549,30),7,7
FOR J=31 TO 151 STEP 40
FOR i=160 TO 460 STEP 100
LINE(i-24,J-9)-(i+24,J+9),5,bf
NEXT i,J
FOR J=51 TO 171 STEP 40
FOR i=210 TO 510 STEP 100
LINE(i-24,J-9)-(i+24,J+9),5,bf
NEXT i,J:COLOR 7,0
IF c$="R" THEN
Game=Game+1
IF Game=1 THEN
FOR i=0 TO 44
SWAP red(i),yellow(i)
SWAP rking(i),yking(i)
NEXT i
END IF
END IF
RETURN